/**
 *
 */
package com.ce.pms.house.service;

import java.util.List;

import com.ce.pms.base.service.IPmsBaseService;
import com.ce.pms.common.model.SysrefcodeDO;
import com.ce.pms.house.model.BuildingDomain;
import com.ce.pms.house.model.HouseGrp;
import com.ce.pms.house.vo.BuildingVO;
import com.ce.pms.house.vo.ImageVO;

/**
 * 功能描述: IBuildingService
 * <p>版权所有：中企动力
 * <p>未经本公司许可，不得以任何方式复制或使用本程序任何部分
 *
 * @author  付湘辉
 * Created on：  2008-6-25
 * @author  付湘辉
 * update on：  2008-6-25
 */

public interface IBuildingService extends IPmsBaseService {

	/**
	 *
	 * 功能描述: 新增楼栋信息
	 *
	 * @author 付湘辉
	 * Created on:2008-7-8
	 *
	 * 修改原因：
	 * @param buildingVo
	 * @return BuildingVO 返回结果
	 */
	public BuildingVO addBuilding(BuildingVO buildingVo);

	/**
	 *
	 * 功能描述: 从一个BuildingDomain对象装配一个BuildingVO对象
	 *
	 * @author 付湘辉
	 * Created on:2008-6-26
	 *
	 * 修改原因：
	 * @param buildingDomain
	 * @return BuildingVO 返回结果
	 */
	public BuildingVO assembleD2V(BuildingDomain buildingDomain);

	/**
	 * 功能描述: 验证指定名称的楼栋在指定楼盘下是否存在,要求id不是buildingId的楼栋 <br>
	 * @param areaId
	 * @param buildingId
	 * @param buildingName
	 * @return true 存在  false 不存在
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-7-16  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public Boolean checkBuildingNameIsExist(Long areaId,Long buildingId, String buildingName);

	/**
	 * 功能描述: 验证指定名称的楼栋在指定楼盘下是否存在 <br>
	 * @param areaId
	 * @param buildingName
	 * @return true 存在  false 不存在
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-7-16  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public Boolean checkBuildingNameIsExist(Long areaId, String buildingName);

	/**
	 * 功能描述: 验证指定的楼栋编码在指定建设期下是否存在 <br>
	 * @param projectId
	 * @param seqNo
	 * @return true 存在  false 不存在
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-7-16  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public Boolean checkSeqNoIsExist(Long projectId, Integer seqNo);

	/**
	 * 功能描述: 验证指定的楼栋编码在指定建设期下是否存在,要求id不是buildingId的楼栋 <br>
	 * @param projectId
	 * @param buildingId
	 * @param seqNo
	 * @return true 存在  false 不存在
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-7-16  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public Boolean checkSeqNoIsExist(Long projectId,Long buildingId, Integer seqNo);

	/**
     * 功能描述: 根据楼栋id删除一个楼栋，如果楼栋下面已有房屋或楼栋已被管理区选用则不能删除 <br>
     *  imageList是一个从调用方传入的列表，它必须是已初始化的，<br>
     * 当这个楼栋有图片时，将放入这个列表，由调用者删除图片文件<br>
     * @param buildingId
     * @param imageList
     *
     * Create author:付湘辉 <br>
     * Create on:2008-7-21  <br>
     * Edit author:  <br>
     * Edit on:    <br>
     * Why:     <br>
     */
    public void deleteBuilding(Long buildingId,List<ImageVO> imageList);

	/**
	 *
	 * 功能描述: 修改楼栋信息
	 *
	 * @author 付湘辉
	 * Created on:2008-7-8
	 *
	 * 修改原因：
	 * @param buildingVo
	 * @return BuildingVO 返回结果
	 */
	public BuildingVO editBuilding(BuildingVO buildingVo);

	/**
	 *
	 * 功能描述: 生成一个指定楼盘期数下的新的楼栋编码
	 *
	 * @author 付湘辉
	 * Created on:2008-7-9
	 *
	 * 修改原因：
	 * @param projectId
	 * @return Integer 返回结果
	 */
	public Integer generationMaxSeqNoByProjectId(Long projectId);

	/**
	 *
	 * 功能描述: 根据楼栋Id得到楼栋单元列表,如果指定的楼栋不分单元，返回一个不含数据的列表
	 *
	 * @author 付湘辉
	 * Created on:2008-6-25
	 *
	 * 修改原因：
	 * @param buildingId
	 * @return List<HouseGrp> 返回结果
	 */
	public List<HouseGrp> getBuildingCellList(Long buildingId);

	/**
	 *
	 * 功能描述: 根据楼盘id查询其所有楼栋，需要将楼栋下的单元查询出来。
	 *
	 * @author 付湘辉
	 * Created on:2008-7-4
	 *
	 * 修改原因：
	 * @param areaId
	 * @return List<BuildingVO> 返回结果
	 */
	public List<BuildingVO> getBuildingListByAreaId(Long areaId);

	/**
	 *
	 * 功能描述: 根据楼盘id查询其所有楼栋实体。
	 *
	 * @author 付湘辉
	 * Created on:2008-10-23
	 *
	 * 修改原因：
	 * @param areaId
	 * @return List<BuildingDomain> 返回结果
	 */
	public List<BuildingDomain> getBuildingDoListByAreaId(Long areaId);

	/**
	 * 功能描述: 查询所有楼栋的列表，同时查询其中的单元信息 <br>
	 * @return List<BuildingVO>
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-8-14  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public List<BuildingVO> getAllBuildingList();

	/**
	 * 功能描述: 根据楼栋id获得一个楼栋的信息 <br>
	 * @param buildingId
	 * @return BuildingVO
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-7-17  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public BuildingVO getBuildingVOById(Long buildingId);

	/**
	 *
	 * 功能描述: 获取耐火等级列表，使用SysrefcodeDO对象封装数据
	 *
	 * @author 付湘辉
	 * Created on:2008-6-30
	 *
	 * 修改原因：
	 * @return List<SysrefcodeDO> 返回结果
	 */
	public List<SysrefcodeDO> getFireproofingLevelList();

	/**
	 *
	 * 功能描述: 获取楼栋住宅层楼层阿拉伯数字列表
	 *
	 * @author 付湘辉
	 * Created on:2008-6-30
	 *
	 * 修改原因：
	 * @param buildingId 楼栋id
	 * @return List<Integer> 返回结果
	 */
	public List<Integer> getHouseStoreyList(Long buildingId);

	/**
	 *
	 * 功能描述: 获取人防等级列表，使用SysrefcodeDO对象封装数据
	 *
	 * @author 付湘辉
	 * Created on:2008-6-30
	 *
	 * 修改原因：
	 * @return List<SysrefcodeDO> 返回结果
	 */
	public List<SysrefcodeDO> getPersonSafeguardList();

    /**
	 *
	 * 功能描述: 获取抗震等级列表，使用SysrefcodeDO对象封装数据
	 *
	 * @author 付湘辉
	 * Created on:2008-6-30
	 *
	 * 修改原因：
	 * @return List<SysrefcodeDO> 返回结果
	 */
	public List<SysrefcodeDO> getQuakeproofLevelList();

	/**
	 * 功能描述:验证住宅层是否已经有房间了
	 * @param
	 * @return
	 *
	 * Create author:xuhaidui
	 * Create on:2008-8-26
	 * Edit author:
	 * Edit on:
	 * Why:
	 */
	public String validationFloor(Long keyword, Integer homeFrom, Integer homeTo);

	/**
	 * 功能描述: 根据收费管理区id查询其下的所有楼栋信息列表 <br>
	 * @param precinctId 收费管理区id
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-10-21  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public List<BuildingVO> queryBuildListByPrecinctId(Long precinctId);

}
